package com.rongkang.interview.juc.lock;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @Description:
 * @author: 荣康
 * @date: 2021/12/2
 */
public class LockDemo {

    public static void main(String[] args) {

        Lock lock = new ReentrantLock();
        //构造器中有true就是公平锁，构造其中啥也不写或者false就为非公平锁，默认非公平锁
        //公平锁是先来后到，非公平锁是先抢先得，强不到就排队
        //公平锁 ： 是指多个线程按照申请锁的顺序来获取锁的，类似于排队买饭，先来后到，本就公平的，就相当于队列
        //非公平锁： 是指多个线程获取锁的顺序，并不是按照申请锁的顺序，有可能后申请的线程比先申请的线程优先获取锁，
        // 有可能造成优先级反转，或者饥饿线程 (也就是有的线程一直获取不到锁)
        //两者区别： 公平锁：就是获取锁会查看此锁维护的等待队列，如果为空，或者当前线程是等待队列的第一个，就占用锁，否则就去等待队列
        //非公平锁： 就是比较粗鲁，上来就像直接获取锁，如果获取不到，就按照类似公平锁的方式获取
        // ReentrantLock 和synchronized都是非公平锁，也是可重入锁，非公平锁的优点在于吞吐量比公平锁要打大

        System.out.println("====================================================================================");






        //可重入锁（也叫递归锁）
        //读写锁  写锁是独占锁，读锁是共享锁
        //CountDownLatch  秦灭六国，一统天下
        //CyclicBarrier   集齐七颗龙珠召唤神龙
        //Semaphore       抢车位 ，多个线程抢多个资源  一个是用于多个共享资源的互斥作用，另一个用于并发线程数的控制

    }
}
